package com.tencent.sr.iris.basic.mp.service.message.impl;


import com.tencent.sr.iris.basic.mp.dependency.message.UserMessageConfigDependency;
import com.tencent.sr.iris.basic.mp.interfaces.response.message.MessageConfigResponse;
import com.tencent.sr.iris.basic.mp.interfaces.vo.message.MessageConfigVO;
import com.tencent.sr.iris.basic.mp.service.message.UserMessageConfigService;
import com.tencent.sr.iris.basic.service.interfaces.dto.UserMessageConfigDTO;
import com.tencent.sr.iris.basic.service.interfaces.request.message.UserMessageBaseRequest;
import com.tencent.sr.iris.user.core.service.interfaces.enums.UserMessageTypeEnum;
import com.tencent.sr.rmall.common.request.PaginationRequest;
import com.tencent.sr.rmall.common.response.PaginationResponse;
import com.tencent.sr.rmall.springbootstarter.authtoken.localbean.AppUser;
import com.tencent.sr.rmall.springbootstarter.utils.BeanCopierUtil;
import java.util.LinkedHashMap;
import java.util.Map;
import javax.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

/**
 * 消息配置
 *
 * @author xiaodongguo
 * @Date: 2021/1/16
 */
@Component
@Slf4j
public class UserMessageConfigServiceImpl implements UserMessageConfigService {

    private static int DEFAULT_PAGE_SIZE = 1000;

    @Resource
    private UserMessageConfigDependency userMessageConfigDependency;
    @Resource
    private AppUser appUser;

    @Override
    public MessageConfigResponse queryAllMessageConfigList() {
        PaginationRequest<UserMessageBaseRequest> request = new PaginationRequest<>();
        request.setPageNum(1);
        request.setPageSize(DEFAULT_PAGE_SIZE);
        Long saasId = appUser.getSaasId();
        UserMessageBaseRequest messageBaseRequest = new UserMessageBaseRequest();
        messageBaseRequest.setSaasId(saasId == null ? null : String.valueOf(saasId));
        request.setQueryCriteria(messageBaseRequest);
        PaginationResponse<UserMessageConfigDTO> userMessageConfigDTOPaginationResponse = null;
        try {
            userMessageConfigDTOPaginationResponse = userMessageConfigDependency.queryUserMessageConfigList(request);
        } catch (Exception e) {
            log.error("queryUserMessageConfigList error", e);
        }

        MessageConfigResponse response = new MessageConfigResponse();

        if (userMessageConfigDTOPaginationResponse == null) {
            return response;
        }

        Map<String, MessageConfigVO> messageConfigMap = new LinkedHashMap<>();
        response.setMessageConfigMap(messageConfigMap);
        for (UserMessageConfigDTO configDTO : userMessageConfigDTOPaginationResponse.getDataList()) {
            MessageConfigVO messageConfigVO = new MessageConfigVO();
            BeanCopierUtil.copy(configDTO, messageConfigVO);
            UserMessageTypeEnum typeEnum = UserMessageTypeEnum.getByCode(configDTO.getMessageType());
            if (null == typeEnum) {
                continue;
            }
            messageConfigMap.put(typeEnum.name(), messageConfigVO);
        }

        return response;
    }

}
